マルチリージョンのインスタンス一覧を取得する
はじめに
こんばんは。武川です。RIの計算をするのに今あるEC2インスタンス、RDSインスタンスの一覧をExcelに読みこむ必要がありました。先日みた 【30分で動かすシリーズ】AWS EC2の利用料金表を扱いやすくしてみるというサーバワークスさんのブログを参考にしてみてシェルでインスタンス一覧をCSVで表示するスクリプトを作ってみました。
スクリプトを動かしてみる
list_instance.shとなづけました。引数なしで動かします。
$ ./list_instances.sh region,Instance ID,State,Launched time,Instance type,Name us-west-2, "i-71e1bf78","running","2014-04-17T10:54:21.000Z","m3.xlarge","SGW" us-west-2, "i-a71a43ae","running","2014-04-17T11:14:09.000Z","m3.medium","FileServer" us-west-2, "i-f4550dfd","running","2014-04-18T06:22:21.000Z","m3.medium","AD" us-west-2, "i-2388d32a","running","2014-04-19T01:11:49.000Z","t1.micro","NAT" region,Instance ID,State,Created time,Instance type,Multi-AZ,Engine,Version ap-northeast-1, "mypostgres","creating",,"db.t1.micro",false,"postgres","9.3.3"
全てのリージョンのEC2インスタンスとRDSインスタンスの一覧が表示されています。EC2とRDSで表示される項目が微妙に異なりますが、RIの計算がしやすいようにインスタンスタイプの部分のカラムはあわせています。 整形して表示するとこんなかんじです。
$ ./list_instances.sh | column -s, -t region Instance ID State Launched time Instance type Name us-west-2 "i-71e1bf78" "running" "2014-04-17T10:54:21.000Z" "m3.xlarge" "SGW" us-west-2 "i-a71a43ae" "running" "2014-04-17T11:14:09.000Z" "m3.medium" "FileServer" us-west-2 "i-f4550dfd" "running" "2014-04-18T06:22:21.000Z" "m3.medium" "AD" us-west-2 "i-2388d32a" "running" "2014-04-19T01:11:49.000Z" "t1.micro" "NAT" region Instance ID State Created time Instance type Multi-AZ Engine Version ap-northeast-1 "mypostgres" "backing-up" "2014-04-19T13:07:26.372Z" "db.t1.micro" false "postgres" "9.3.3"
スクリプトについて
IAM roleを使わない場合、アクセスキーとシークレットキーをうめこむ必要があります。
#!/bin/sh export AWS_ACCESS_KEY_ID=アクセスキー export AWS_SECRET_ACCESS_KEY=シークレットキー EC2_REGIONS=("us-east-1" "us-west-1" "us-west-2" "eu-west-1" "ap-southeast-1" "ap-southeast-2" "ap-northeast-1" "sa-east-1") #Listing ec2 instances echo "region,Instance ID,State,Launched time,Instance type,Name" for reg in ${EC2_REGIONS[@]}; do export AWS_DEFAULT_REGION=$reg aws ec2 describe-instances | jq -r "@csv \"$reg, \(.Reservations[].Instances[] | [.InstanceId, .State.Name, .LaunchTime, .InstanceType, .Tags[0].Value]) \"" done #Listing rds instances echo "region,Instance ID,State,Created time,Instance type,Multi-AZ,Engine,Version" for reg in ${EC2_REGIONS[@]}; do export AWS_DEFAULT_REGION=$reg aws rds describe-db-instances | jq -r "@csv \"$reg, \(.DBInstances[] | [.DBInstanceIdentifier, .DBInstanceStatus, .InstanceCreateTime, .DBInstanceClass, .MultiAZ , .Engine , .EngineVersion ]) \"" done
行なっていることは単純でEC2_REGIONSに定義されたリージョンに対して一つ一つawsコマンドを発行してEC2、RDSのインスタンスを取得し、jqで整形しています。
おわりに
作って気づきましたが、インスタンスの消し忘れにも使えます。 料金表もjsonで取れるので、もうちょっとがんばるとコマンド一つで現在の環境のRI費用が一発で取ることもできるようになりますね。 ではでは。